/*
 * Grafo.h
 *
 *  Created on: 16/10/2012
 *      Author: vagner
 */

#ifndef GRAFO_H_
#define GRAFO_H_
#include <vector>
#include "MyMatrix.h"
#include <cmath>


namespace computacaoNatural {

typedef struct{
	int idVertice; //ID único para cada vertice;
	int coorX; //Coordenada X do ponto
	int coorY; //Coordenada Y do ponto
	int capacidade; //Capacidade de atendimento de um vertice
	int demanda; //Capacidade demandada de um ponto.
}Vertice;

typedef std::vector<Vertice> Vertices;
typedef MyMatrix MatrizDistancia;


class Grafo {
private:
	Vertices* pVertice;
	MatrizDistancia* MD;
	int numVertices;
	Grafo();

	double distanciaEntreVertices(Vertice& v1, Vertice& v2){
		double distancia;
		if(v1.idVertice == v2.idVertice){
			distancia = 0.0;
		}else{
			distancia = std::sqrt(std::pow(v2.coorX-v1.coorX,2.0) + std::pow(v2.coorY-v1.coorY,2.0));
		}
		return distancia;
	}
public:
	Grafo(int numVertices);
	void insereVertice(const Vertice& v);
	void calculaMatrizDistancia(void);
	void showVertices(void)const;
	void showMatrizDistancia(void)const;
	int getCapacidade(int idVertice);
	int getDemanda (int idVertice);
	int getNumVertices();
	double getDistancia(int vertice_1, int vertice_2);
	virtual ~Grafo();
};

} /* namespace computacaoNatural */
#endif /* GRAFO_H_ */
